package com.leiden.sdk;

import android.graphics.BitmapFactory;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import leiden.model.LeidenEnvPrinterModel;
import leiden.model.LeidenPrinterModel;
import leiden.model.LeidenSmallBitmapModel;

public class LeidenUtils {


    public static JSONObject toJSONObject(LeidenEnvPrinterModel leidenEnvPrinterModel) throws JSONException {

        JSONObject jsonObject = new JSONObject();
        jsonObject.put("printerAccuracy",leidenEnvPrinterModel.getPrinterAccuracy());
        jsonObject.put("printfSpeed",leidenEnvPrinterModel.getPrintfSpeed());
        jsonObject.put("printfPotency",leidenEnvPrinterModel.getPrintfPotency());
        jsonObject.put("printfMedium",leidenEnvPrinterModel.getPrintfMedium());
        jsonObject.put("labelType",leidenEnvPrinterModel.getLabelType());
        jsonObject.put("topDeviation",leidenEnvPrinterModel.getTopDeviation());
        jsonObject.put("printfModel",leidenEnvPrinterModel.getPrintfModel());
        jsonObject.put("beStrippedModel",leidenEnvPrinterModel.getBeStrippedModel());
        jsonObject.put("beStrippedFeedVolume",leidenEnvPrinterModel.getBeStrippedFeedVolume());
        jsonObject.put("cutNumber",leidenEnvPrinterModel.getCutNumber());
        jsonObject.put("cutterFeedVolume",leidenEnvPrinterModel.getCutterFeedVolume());
        jsonObject.put("standardFeedVolume",leidenEnvPrinterModel.getStandardFeedVolume());

        return jsonObject;
    }

    public static LeidenPrinterModel createLeidenPrinterModel(JSONObject jsonObject) throws JSONException {

        LeidenPrinterModel leidenPrinterModel = new LeidenPrinterModel();

        leidenPrinterModel.setLabelW(jsonObject.getInt("labelW"));
        leidenPrinterModel.setLabelH(jsonObject.getInt("labelH"));

        int number = 1;
        if (jsonObject.has("number")) {
            number = jsonObject.getInt("number");
        }

        leidenPrinterModel.setNumber(number);

        if (!jsonObject.has("bitmaps")) {
            return leidenPrinterModel;
        }

        JSONArray bitmaps = jsonObject.getJSONArray("bitmaps");

        for (int i = 0; i < bitmaps.length(); i++) {
            JSONObject bitmapJSONObject = bitmaps.getJSONObject(i);
            leidenPrinterModel.addAPLSmallBitmapModel(createLeidenSmallBitmapModel(bitmapJSONObject));
        }

        return leidenPrinterModel;
    }


    public static LeidenEnvPrinterModel createLeidenEnvPrinterModel(JSONObject jsonObject) throws JSONException {

        LeidenEnvPrinterModel leidenEnvPrinterModel = new LeidenEnvPrinterModel();

        if (jsonObject.has("beStrippedFeedVolume")) {
            leidenEnvPrinterModel.setBeStrippedFeedVolume(jsonObject.getInt("beStrippedFeedVolume"));
        }

        if (jsonObject.has("cutNumber")) {
            leidenEnvPrinterModel.setCutNumber(jsonObject.getInt("cutNumber"));
        }

        if (jsonObject.has("cutterFeedVolume")) {
            leidenEnvPrinterModel.setCutterFeedVolume(jsonObject.getInt("cutterFeedVolume"));
        }

        if (jsonObject.has("standardFeedVolume")) {
            leidenEnvPrinterModel.setStandardFeedVolume(jsonObject.getInt("standardFeedVolume"));
        }

        if (jsonObject.has("printerAccuracy")) {
            leidenEnvPrinterModel.setPrinterAccuracy(jsonObject.getInt("printerAccuracy"));
        }

        if (jsonObject.has("printfSpeed")) {
            leidenEnvPrinterModel.setPrintfSpeed(jsonObject.getInt("printfSpeed"));
        }

        if (jsonObject.has("printfPotency")) {
            leidenEnvPrinterModel.setPrintfPotency(jsonObject.getInt("printfPotency"));
        }

        if (jsonObject.has("printfMedium")) {
            leidenEnvPrinterModel.setPrintfMedium(jsonObject.getInt("printfMedium"));
        }

        if (jsonObject.has("labelType")) {
            leidenEnvPrinterModel.setLabelType(jsonObject.getInt("labelType"));
        }

        if (jsonObject.has("topDeviation")) {
            leidenEnvPrinterModel.setTopDeviation(jsonObject.getInt("topDeviation"));
        }

        if (jsonObject.has("printfModel")) {
            leidenEnvPrinterModel.setPrintfModel(jsonObject.getInt("printfModel"));
        }

        if (jsonObject.has("beStrippedModel")) {
            leidenEnvPrinterModel.setBeStrippedModel(jsonObject.getInt("beStrippedModel"));
        }

        return leidenEnvPrinterModel;

    }


    public static LeidenSmallBitmapModel createLeidenSmallBitmapModel(JSONObject jsonObject) throws JSONException {

        LeidenSmallBitmapModel leidenSmallBitmapModel = new LeidenSmallBitmapModel();

        if (jsonObject.has("x")) {
            leidenSmallBitmapModel.setX(jsonObject.getInt("x"));
        }

        if (jsonObject.has("y")) {
            leidenSmallBitmapModel.setY(jsonObject.getInt("y"));
        }

        if (jsonObject.has("threshold")) {
            leidenSmallBitmapModel.setThreshold(jsonObject.getInt("threshold"));
        }

        leidenSmallBitmapModel.setWD(jsonObject.getInt("WD"));
        leidenSmallBitmapModel.setHT(jsonObject.getInt("HT"));

        String bitmapPath = jsonObject.getString("bitmapPath");

        leidenSmallBitmapModel.setBitmap(BitmapFactory.decodeFile(bitmapPath));

        if (leidenSmallBitmapModel.getBitmap() == null) {
            throw new RuntimeException("创建bitmap失败");
        }

        return leidenSmallBitmapModel;
    }


}
